package com.aididi.designpatter;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Auther: zx.xu
 * @Description:    基于jdk的动态代理设计模式
 * 在Java中要想实现动态代理机制，需要java.lang.reflect.InvocationHandler接口和 java.lang.reflect.Proxy 类的支持
 */
public class JdkDynamicProxyDemo {

    public static void main(String[] args) {

        // 目标对象
        Network2 target = new Real2();
        // 【原始的类型 】
        System.out.println(target.getClass());
        target.browse();

        NetWorkInvocationHandler invocationHandler = new NetWorkInvocationHandler();
        // 给目标对象，创建代理对象
        Network2  proxyInstance = (Network2) invocationHandler.getProxyInstance(target);
        // class $Proxy0   内存中动态生成的代理对象
        System.out.println(proxyInstance.getClass());
        proxyInstance.browse();
    }


}

interface Network2 { // 定义Network接口
    public void browse(); // 定义浏览的抽象方法
}

class Real2 implements Network2 { // 真实的上网操作
    @Override
    public void browse() { // 覆写抽象方法
        System.out.println("上网浏览信息！");
    }
}



